package com.yd;


import com.doman.Parent;
import com.doman.Student;
import com.doman.Teacher;
import com.doman.TeacherParent;
import com.resultmsg.BaseEnums;
import com.resultmsg.Result;
import com.resultmsg.Results;
import com.server.ParentMapper;
import com.server.StudentMapper;
import com.server.TeacherMapper;
import com.server.TeacherParentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RequestMapping(value = "/educloud")
@RestController
public class ParentsController {

    @Autowired
    private ParentMapper parentMapper;
    @Autowired
    private StudentMapper studentMapper;
    @Autowired
    private TeacherParentMapper teacherParentMapper;

    //查询家长信息
    @RequestMapping("/parentselect")
    public Result teacherparentGET(Parent parent) {
        //查询用户是否是绑定用户
        Parent parent1 = parentMapper.selectByPrimaryByOpenid(parent);
        //判断家长信息是否为空,不为空的话说明查询到了
        if (parent != null) {
            return Results.successWithData(parent1, BaseEnums.SUCCESS.code(), BaseEnums.SUCCESS.desc());
        }
        //若不是绑定用户的话返回不做跳转code 未绑定用户
        return Results.successWithData("", BaseEnums.FORBIDDEN.code(), BaseEnums.FORBIDDEN.desc());
    }

    //根据openid修改家长信息
    @RequestMapping("/parentupdate")
    public Result teacherparentPATCH(Parent parent) {
        //查询用户是否是绑定用户
        int parentInt = parentMapper.updateByPrimaryByOpenid(parent);
        //判断家长信息是否为空,不为空的话说明查询到了
        if (parentInt > 0) {
            Student student = new Student();
            student.setBindcode(parent.getCurrentcode());
            Student student1 = studentMapper.selectByPrimaryByCurrentCode(student);
            return Results.successWithData(student1, BaseEnums.SUCCESS.code(), BaseEnums.SUCCESS.desc());
        }
        //若不是绑定用户的话返回不做跳转code 未绑定用户
        return Results.successWithData("", BaseEnums.FORBIDDEN.code(), BaseEnums.FORBIDDEN.desc());
    }

    /*
     * 清除家长数据
     * */
    @RequestMapping("/deleteparentdata")
    public Result deleteparentdata(@RequestBody Parent parent) {
        if (parent.getOpenid().isEmpty() && parent.getCurrentcode().isEmpty()) {
            return Results.successWithData("", BaseEnums.FAILURE.code(),BaseEnums.FAILURE.desc());
        }
        String[] strArr1 = parent.getBindcode().split(",");
        if (strArr1.length <= 1){//删除
            //查询家长关联关系表删除
            TeacherParent teacherParent = new TeacherParent();
            teacherParent.setOpenid(parent.getOpenid());
            int i = teacherParentMapper.deleteByPrimaryByOpenid(teacherParent);
            //查询家长表删除
            int i1 = parentMapper.deleteByPrimaryByOpenid(parent);
            //清空该学生的绑定状态
            Student student = new Student();
            student.setBindcode(parent.getCurrentcode());
            Student student1 = studentMapper.selectByPrimaryByCurrentCode(student);
            //拿到学生绑定的数据集合
            String[] strArr = student1.getRoleParents().split(",");
            //定义变量用来存储清空某个家长后的信息
            String str = "";
            //定义什么情况下需要改变这个学生的绑定状态比   学生下面没有绑定用户的时候改变绑定状态
            int iso = 0;
            for (String s : strArr) {
                //绑定的用户不是我们需要清除的用户   是需要的清除并赋值为0
                if (!s.equals(parent.getOpenid())){
                    str += s+",";
                }else{
                    str += "0,";
                }
                //是0的时候进来这样累计就能算出有几个身份没有被绑定，有6个以上的肯定是最后一个直接赋值为未绑定状态
                if(s.equals("0")){
                    iso++;
                }
            }
            //清除该家长信息后添加到数据中
            student1.setRoleParents(str);
            //长度大于等于6的时候说明此次是最后一次清除  改变状态
            if(iso == 6){
                student1.setBindStatus(0);
            }
            //前期工作准备完成后我们进行对数据的修改
            int updateByPrimaryKeySelective = studentMapper.updateByPrimaryKeySelective(student1);
            return Results.successWithData(updateByPrimaryKeySelective, BaseEnums.SUCCESS.code(), BaseEnums.SUCCESS.desc());
        }else{//修改
            //首先这次是不删除的操作   主要是清除绑定用户的信息  关联关系表不用清除  家长表清除绑定码   并把第一次绑定的学生为默认，如果没有则不修改
            //学生表还是执行清除操作
            //清除家长表绑定的学生信息
            //定义存储对象
            String s1 = "";
            String[] split = parent.getBindcode().split(",");
            for (int i = 0; i < split.length; i++) {
                //是不是相同的数据相同的清除不是相同的存储起来
                if (!split[i].equals(parent.getCurrentcode())){
                    s1 += split[i]+",";
                }
            }
            String[] split1 = s1.split(",");
            for (int i = 0; i < split1.length; i++) {
                //是不是相同的数据相同的清除不是相同的存储起来
                if (i == 0){
                    parent.setCurrentcode(split1[i]);
                }
            }
            parent.setBindcode(s1);
            int i = parentMapper.updateByPrimaryByOpenid(parent);
            //清空该学生的绑定状态
            Student student = new Student();
            student.setBindcode(parent.getCurrentcode());
            Student student1 = studentMapper.selectByPrimaryByCurrentCode(student);
            //拿到学生绑定的数据集合
            String[] strArr = student1.getRoleParents().split(",");
            //定义变量用来存储清空某个家长后的信息
            String str = "";
            //定义什么情况下需要改变这个学生的绑定状态比   学生下面没有绑定用户的时候改变绑定状态
            int iso = 0;
            for (String s : strArr) {
                //绑定的用户不是我们需要清除的用户   是需要的清除并赋值为0
                if (!s.equals(parent.getOpenid())){
                    str += s+",";
                }else{
                    str += "0,";
                }
                //是0的时候进来这样累计就能算出有几个身份没有被绑定，有6个以上的肯定是最后一个直接赋值为未绑定状态
                if(s.equals("0")){
                    iso++;
                }
            }
            //清除该家长信息后添加到数据中
            student1.setRoleParents(str);
            //长度大于等于6的时候说明此次是最后一次清除  改变状态
            if(iso == 6){
                student1.setBindStatus(0);
            }
            //前期工作准备完成后我们进行对数据的修改
            int updateByPrimaryKeySelective = studentMapper.updateByPrimaryKeySelective(student1);
            return Results.successWithData(updateByPrimaryKeySelective, BaseEnums.SUCCESS.code(), BaseEnums.SUCCESS.desc());
        }
    }
}
